define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {

    var Controller = {
        index: function () {
            // 初始化表格参数配置
            Table.api.init({
                extend: {
                    index_url: 'purchase/purchasefunction/purchaserequisition/index' + location.search,
                    add_url: 'purchase/purchasefunction/purchaserequisition/add',
                    edit_url: 'purchase/purchasefunction/purchaserequisition/edit',
                    del_url: 'purchase/purchasefunction/purchaserequisition/del',
                    multi_url: 'purchase/purchasefunction/purchaserequisition/multi',
                    import_url: 'purchase/purchasefunction/purchaserequisition/import',
                    table: 'purchase_pr_headers',
                }
            });
            //修改新增页面的大小
            $(".btn-add").data("area", ["80%","90%"]);//为选择器为".btn-add"的元素设置一个data属性"area"，值为["90%","90%"]。
            //修改编辑页面的大小
            $(".btn-edit").data("area", ["80%","90%"]);//为选择器为".btn-edit"的元素设置一个data属性"area"，值为["90%","90%"]。
            //修改表格中编辑按钮弹出页面的大小
            $(document).on('post-body.bs.table', function (e, settings, json, xhr) {
                $(".btn-editone").data("area", ["80%", "90%"]);
            });
            var table = $("#table");
            // 初始化表格
            table.bootstrapTable({
                url: $.fn.bootstrapTable.defaults.extend.index_url,
                pk: 'id',
                sortName: 'id',
                fixedColumns: true,
                fixedRightNumber: 2,
                columns: [
                    [
                        {checkbox: true},
                        {field: 'pr_num', title: __('Pr_num'), operate: 'LIKE'},
                        {field: 'status', title: __('Status'), searchList: {"0":__('Status 0'),"1":__('Status 1'),"2":__('Status 2'),"3":__('Status 3')}, formatter: Table.api.formatter.status},
                        {field: 'need_time', title: __('Need_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
                        {field: 'approve_by', title: __('Approve_by'), operate: 'LIKE'},
                        {field: 'approve_time', title: __('Approve_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
                        {field: 'createtime', title: __('Createtime'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
                        {field: 'depart_name', title: __('Depart_name'), operate: 'LIKE'},
                        {field: 'order_type', title: __('Order_type'), searchList: {"0":__('Order_type 0'),"1":__('Order_type 1')}, formatter: Table.api.formatter.normal},
                        //查看
                        {field: 'id', title: __('detial'), table: table,
                            buttons:
                                [
                                    {
                                        name: 'name1',
                                        text:__('detials'),
                                        title: __('detials'),
                                        icon: 'fa fa-list',//图标
                                        classname: 'btn btn-xs btn-primary btn-dialog', //btn-dialog表示为弹窗
                                        url: 'popup/purchase/prline/index?pr_num={pr_num}',//自带参数ids
                                        extend: 'data-area=\'["75%","75%"]\'',//弹窗大小
                                        callback:function(data){}
                                    },
                                ], operate:false, formatter: Table.api.formatter.buttons
                        },
                        {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
                    ]
                ]
            });

            // 为表格绑定事件
            Table.api.bindevent(table);
        },
        recyclebin: function () {
            // 初始化表格参数配置
            Table.api.init({
                extend: {
                    'dragsort_url': ''
                }
            });

            var table = $("#table");

            // 初始化表格
            table.bootstrapTable({
                url: 'purchase/purchasefunction/purchaserequisition/recyclebin' + location.search,
                pk: 'id',
                sortName: 'id',
                columns: [
                    [
                        {checkbox: true},
                        {field: 'id', title: __('Id')},
                        {
                            field: 'deletetime',
                            title: __('Deletetime'),
                            operate: 'RANGE',
                            addclass: 'datetimerange',
                            formatter: Table.api.formatter.datetime
                        },
                        {
                            field: 'operate',
                            width: '140px',
                            title: __('Operate'),
                            table: table,
                            events: Table.api.events.operate,
                            buttons: [
                                {
                                    name: 'Restore',
                                    text: __('Restore'),
                                    classname: 'btn btn-xs btn-info btn-ajax btn-restoreit',
                                    icon: 'fa fa-rotate-left',
                                    url: 'purchase/purchasefunction/purchaserequisition/restore',
                                    refresh: true
                                },
                                {
                                    name: 'Destroy',
                                    text: __('Destroy'),
                                    classname: 'btn btn-xs btn-danger btn-ajax btn-destroyit',
                                    icon: 'fa fa-times',
                                    url: 'purchase/purchasefunction/purchaserequisition/destroy',
                                    refresh: true
                                }
                            ],
                            formatter: Table.api.formatter.operate
                        }
                    ]
                ]
            });

            // 为表格绑定事件
            Table.api.bindevent(table);
        },
        // add: function () {
        //     Controller.api.bindevent();
        // },
        add: function () {
            // 日期检查，光标移开执行
            $(document).on("blur",".datetimepicker",function(){
                //console.info("日期检查");
                // 获取当前日期,时间戳
                var date = new Date();
                // 添加分隔符“-”
                var seperator = "-";
                //获取input内需求日期
                var need_date = new Date($('#c-need_time').val());
                // 获取今天的年月日
                var year = date.getFullYear();
                var month = date.getMonth() + 1;//返回的是月份序号0-11需要+1才是月份
                var today = date.getDate();
                // 对月份进行处理，1-9月在前面添加一个“0”
                if (month >= 1 && month <= 9) {
                    month = "0" + month;
                }
                // 对日期进行处理，1-9号在前面添加一个“0”
                if (today >= 0 && today <= 9) {
                    today = "0" + today;
                }
                // 最后拼接字符串，得到一个格式为(yyyy-MM-dd)的日期
                var nowDate = date.getFullYear() + seperator + month + seperator + today;
                //转换为时间戳
                var now_date = new Date(nowDate);
                // 检查日期是否小于今天，是则弹窗提示
                if(need_date<now_date){
                    layer.alert("需求日期不可以小于今天！");
                    $('#c-need_time').val(nowDate);//需求日期回到今天的日期
                }
            });
            //光标移开class为all_quantity对应的文本框，计算总数量
            $(document).on("blur",".all_quantity",function(){
                var all_quantity = 0;//设置变量all_quantity为0
                var shuliang = 0;
                for(var i = 1;i<50;i++){
                    //获取单行的数量
                    shuliang  = $('#quantity' + i).val();
                    if(shuliang == ""){
                        shuliang = 0;
                    }
                    else if(Number(shuliang) >0){
                        //大于零的话，总数量就等于初始的总数量加上当前行的数量
                        all_quantity = Number(all_quantity) + Number(shuliang);
                    }
                }
                //总数量的值就是经过循环计算出来的值
                $('#all_quantity').val(all_quantity);
            });

            // 是指在前端模板中通过参数 "Fast" 引用后端代码中的 Fast 函数，用于前后端的交互
            Template.helper("Fast", Fast);
            //用于追加行的实现,追加行之后，行值发生改变
            //fa.event.appendfieldlist事件是指，当用户在确认框的输入框中添加新字段时触发的事件
            //当在文档上发生fa.event.appendfieldlist事件时，为id为linetable的元素中class为btn-append的元素绑定一个函数，该函数接受e和obj两个参数。
            $(document).on("fa.event.appendfieldlist", "#linetable .btn-append", function (e, obj) {
                //绑定动态下拉组件,触发下拉列表功能，解决不会被渲染的问题
                Form.events.selectpage(obj);
                //绑定日期组件，触发日期选择功能
                Form.events.datetimepicker(obj);
                //判断id下linetable的长度
                var len = $('#linetable tr').length;
                //console.info(len);
                for (var i = 1; i < len - 1; i++) {
                    $('#linetable tr:eq(' + i + ') td:first').find('input').val(i);
                    //查找id为table的表格内索引为i的行中的第一个单元格，然后将索引i设置为文本内容。
                    //tr:eq(' + i + ') 是一个用于选择HTML元素的jQuery选择器，意思是选取序号为i的表格行（table row）。
                }


                //选择页面弹窗
                //选择所有具有"form"角色的表单。
                var form = $("form[role=form]");
                //fachoosetable(form)是一个函数，它可以用来检查一个表单中的输入字段，以确保它们符合预定义的模式或规则。
                fachoosetable(form);
                //定义函数fachoosetable()
                function fachoosetable (form) {
                    // 如果表单中的".fachoosetable"元素的大小大于0，则执行下面的代码。
                    if ($(".fachoosetable", form).size() > 0) {
                        //对class为fachoosetable的组件执行点击事件
                        $(".fachoosetable", form).on('click', function () {
                            var that = this;
                            //获取该界面的前端页面传来的line（前端展示的是data-line）
                            var line = $(this).data("line") ? $(this).data("line") : false;
                            //获取该界面的前端界面传来的url
                            var url = $(this).data("url") ? $(this).data("url") : (typeof Backend !==
                            'undefined' ? "popup/purchase/itemno/select" : "");
                            //打开弹窗
                            parent.Fast.api.open(url + "?line=" + line, __('Choose'), {
                                //回传值
                                callback: function (data) {
                                    //直接给页面的该行数据定义值
                                    $("#item_no"+line).val(data.row.item_no);
                                    $("#item_name"+line).val(data.row.item_name);
                                    $("#item_desc"+line).val(data.row.item_desc);
                                    $("#units"+line).val(data.row.units);
                                }
                            });
                            return false;
                        });
                    }
                }

            });



            //自定义删除事件
            //目前仅添加了动态更新行号，判断是否为最后一条数据并抛出异常，删除实际在上述click事件中进行，由于处在源文件中且点击按钮后两个方法均会运行目前未修改完成
            $(document).on("click", ".btn-removeline", function () {
                if ($('#linetable tr').length == 3) {
                    // alert(__("Can't delete"));
                    // return false;
                    Toastr.info("这是最后一条了！");
                    throw new Error('Generated error manually to stop execution of script');
                }
                // 先找到最近的具有“fieldlist”类的元素，这里则是html中的table，将其赋值给变量container；
                var container = $(this).closest(".fieldlist");
                //定义一个tagName，先去寻找container中是否有data-tag（同data-name，data-template）,如果没有就判断container是否是一个table,如果是tagName的值为tr,否则为dd
                var tagName = container.data("tag") || (container.is("table") ? "tr" : "dd");
                //找到最近的具有tagName标签（这里即tr）
                $(this).closest(tagName).remove();
                //refresh(container);
                Toastr.info("删除成功！");
                //设置行号的值
                var len = $('#linetable tr').length;
                //console.info(len);
                for (var i = 1; i < len - 1; i++) {
                    $('#linetable tr:eq(' + i + ') td:first').find('input').val(i);
                    //查找id为table的表格内索引为i的行中的第一个单元格，然后将索引i设置为文本内容。
                    //tr:eq(' + i + ') 是一个用于选择HTML元素的jQuery选择器，意思是选取序号为i的表格行（table row）。
                }
                //执行删除的时候总数进行变更
                var all_quantity = 0;//设置变量all_quantity为0
                var shuliang = 0;
                for(var j = 1;j<50;j++){
                    //获取单行的数量
                    shuliang  = $('#quantity' + j).val();
                    if(shuliang == ""){
                        shuliang = 0;
                    }
                    else if(Number(shuliang) >0){
                        //大于零的话，总数量就等于初始的总数量加上当前行的数量
                        all_quantity = Number(all_quantity) + Number(shuliang);
                    }
                }
                //总数量的值就是经过循环计算出来的值
                $('#all_quantity').val(all_quantity);
            });
            //因为日期选择框不会触发change事件，导致无法刷新textarea，所以加上判断
            $(document).on("dp.change", "#add-form .datetimepicker", function () {
                // 触发当前元素的父元素的上一个元素的input的change事件。
                $(this).parent().prev().find("input").trigger("change");
            });
            var len = $('#linetable tr').length - 1;//寻找id为table的表格tr的长度（即寻找在表格table下的tr的个数）-1（除去表头）
            var lens = len - 2;//减二的目的是减去第一行固定行和最后一行总计行（保留两行）

            //选择行料号，自动带出料号相关信息
            // $('#linedetail #item_no').data("eSelect",function(data){
            //     alert("111")
            //     // for(var i = 1; i < 50; i++){
            //     //     //求出每行的item_no值
            //     //     var item_no = $('#item_no' + i).val();
            //     //     if(item_no == ""){

            //     //     }
            //     //     else{
            //     //         $('#item_name'+ i).val(data.item_name);//将id为c-customer_contact的值更改为控制器中的customer_contacts
            //     //         $('#item_desc'+ i).val(data.item_desc);//币别
            //     //         $('#units'+ i).val(data.units);//币别
            //     //     }
            //     // }
            // });




            Controller.api.bindevent();




            // //选择，自动带出客户相关信息
            // $('#c-customer_code').data("eSelect",function(data){//对需要改变的数据进行监听，如果选中id为c-customer_code的值，就更改下面的值
            //     $('#c-customer_contact').val(data.customer_contacts);//将id为c-customer_contact的值更改为控制器中的customer_contacts
            //     $('#c-currency_code').val(data.currency_code);//币别
            //     $('#c-ship_address').val(data.customer_address);//出货地址
            //     $('#c-yewu').val(data.employee_num);//业务员
            //     $('#c-yewu').selectPageRefresh();//刷新下拉列表以显示选项
            //     // $('#c-tax_name').val(data.tax_name);//税别
            //     // $('#c-tax_name').selectPageRefresh();//刷新下拉列表以显示选项
            //     $('#c-tax_flag').selectpicker('val', data.tax_flag);//是否含税
            //     $('#c-term_name').val(data.term_name);//付款条件
            //     $('#c-term_name').selectPageRefresh();//刷新下拉列表以显示选项
            // });
            //选择税别带出税率
            // $('#c-tax_name').data("eSelect",function(data){//对需要改变的数据进行监听，如果选中id为c-tax_name的值，就更改下面的值
            //     $('#c-tax_rate').val(data.tax_mount);//将id为c-tax_rate的值更改为控制器中的tax_mount
            // });

            //表单selectpage动态渲染，打开页面后仅渲染一次。通过js添加的selectpage需要手动触发渲染
            Form.events.selectpage($('#add-form'));





            // 实现提交表单之后不关闭弹窗
            // Form.api.bindevent($("form"), function(data,ret){
            //     //成功的回调,如果返回false,将不会出现提示消息
            //     // Toastr.success("生成成功");
            //     //return false;//这行代码阻止弹框关闭
            // }, function(data, ret){
            //     //失败的回调,如果返回false,将不会出现提示消息
            // }, function(success, error){
            //     //如果返回falsle,将阻止表单的提交
            //     //如果处理成功后我们可以使用Form.api.submit(this, success, error);再次提交表单
            // });

        },
        edit: function () {
            Controller.api.bindevent();
        },
        api: {
            bindevent: function () {
                Form.api.bindevent($("form[role=form]"));
            }
        }
    };
    return Controller;
});
